home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / util / boot / splitkick13.lha / SplitKick.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-13  |  3.1 KB  |  150 lines

  1. /*
  2. ** $VER: SplitKick.c 1.003 (13.01.97) © Gian Maria Calzolari
  3. **
  4. **
  5. **  FUNCTION:
  6. **      Dato un kickfile lo splitta per essere scritto su due eprom:
  7. **
  8. **      AmigaOS accede al kick a 32bit e quindi usa due chip in cui preleva
  9. **      una WORD (16bit) da ognuna per "comporre" i 32bit!
  10. **
  11. ** $HISTORY:
  12. **
  13. ** 13 Jan 1997 : 001.003 : Lettura diretta del file anzichè da un buffer di
  14. **                          memoria, aggiunta gestione argomenti
  15. ** 06 Jan 1997 : 001.002 : Aggiunti controlli vari
  16. ** 05 Jan 1997 : 001.001 : Da esempio di Wiz
  17. **
  18. */
  19.  
  20. #include "SplitKick.h"
  21.  
  22. // Questo serve *solo* per avere EOF definito...
  23. #include <stdio.h>
  24.  
  25. void main( void ) {
  26.     LONG i, ic;
  27.     TEXT Out1[256], Out2[256];
  28.  
  29.     args[ARG_INPUT ] = (APTR) NULL;
  30.     args[ARG_OUTPUT] = "Ram:KickImg";
  31.  
  32.     if ( (rda = ReadArgs(Template, (LONG *)args, NULL) ) == NULL)
  33.         erroreAD(NULL);
  34.  
  35.     sprintf(Out1,"%s%d", args[ARG_OUTPUT], 1);
  36.     sprintf(Out2,"%s%d", args[ARG_OUTPUT], 2);
  37.  
  38.     from = Open(args[ARG_INPUT], MODE_OLDFILE);
  39.  
  40.     if (from == 0)
  41.         erroreAD("Apertura KickFile input");
  42.  
  43.     to1 = Open(Out1, MODE_NEWFILE );
  44.  
  45.     if (to1 == 0)
  46.         erroreAD("Apertura 'lo' image");
  47.  
  48.     to2 = Open(Out2, MODE_NEWFILE );
  49.  
  50.     if (to2 == 0)
  51.         erroreAD("Apertura 'hi' image");
  52.  
  53.     PutStr ( version );
  54.     PutStr ( "\n" );
  55.  
  56.     // 131072 è il numero di words (16bits) in 256K
  57.     for( i = 0; i < 131072; i++ ) {
  58.  
  59.         // 16 bits in uno...
  60.         if ( (ic = FGetC(from) ) == EOF)
  61.             erroreAD("Fine prematura file input!");
  62.  
  63.         if ( FPutC(to1, ic) == EOF)
  64.             erroreAD("Errore inatteso scrittura primi 8 bits 'lo'");
  65.  
  66.         if ( (ic = FGetC(from) ) == EOF)
  67.             erroreAD("Fine prematura file input!");
  68.  
  69.         if ( FPutC(to1, ic) == EOF)
  70.             erroreAD("Errore inatteso scrittura secondi 8 bits 'lo'");
  71.  
  72.         // ...e 16 bits nell'altro!
  73.         if ( (ic = FGetC(from) ) == EOF)
  74.             erroreAD("Fine prematura file input!");
  75.  
  76.         if ( FPutC(to2, ic) == EOF)
  77.             erroreAD("Errore inatteso scrittura primi 8 bits 'hi'");
  78.  
  79.         if ( (ic = FGetC(from) ) == EOF)
  80.             erroreAD("Fine prematura file input!");
  81.  
  82.         if ( FPutC(to2, ic) == EOF)
  83.             erroreAD("Errore inatteso scrittura secondi 8 bits 'hi'");
  84.     }
  85.  
  86.     fine();
  87.     exit(RETURN_OK);
  88. }
  89.  
  90. /// Routines generiche
  91. /* ----------------------------------- fine ------------------------------------
  92.  
  93.  Comment:
  94.  
  95.  Chiusura programma
  96.  
  97. */
  98.  
  99. void fine(void) {
  100.  
  101.     if (rda) {
  102.         FreeArgs(rda);
  103.         rda = NULL;
  104.     }
  105.  
  106.     if (from) {
  107.         Close( from );
  108.         from = 0;
  109.     }
  110.  
  111.     if ( to1 ) {
  112.         Close( to1 );
  113.         to1 = 0;
  114.     }
  115.  
  116.     if ( to2 ) {
  117.         Close( to2 );
  118.         to2 = 0;
  119.     }
  120.  
  121. }
  122.  
  123. /* --------------------------------- ErroreAD ----------------------------------
  124.  
  125.  Comment:
  126.  
  127.     Visualizza un messaggio per errori generati da AmigaDOS
  128.  
  129.     str -> puntatore ad una stringa di testo
  130.  
  131. */
  132.  
  133. void erroreAD(STRPTR str)
  134. {
  135.     TEXT c[256] = "";
  136.  
  137.     if ( IoErr() )
  138.         Fault(IoErr(), str, c, sizeof(c) );
  139.       else
  140.         PutStr( str );
  141.  
  142.     PutStr( c );
  143.     PutStr( "\n" );
  144.  
  145.     fine();
  146.     exit(RETURN_FAIL);
  147. }
  148. ///
  149.  
  150.